package com.sk.sk_frame_cloud.util;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 复制文件以及文件夹
 *
 * @Author jiaok
 * @Date 2023-12-08 17:16
 */
@Slf4j
public class FileCopyUtil {


    /**
     * 复制单个文件
     * @param oldPath 要复制的文件名
     * @param newPath 目标文件名
     */
    public static void copyfile(String oldPath, String newPath) {
        int hasRead = 0;
        File oldFile = new File(oldPath);
        if (oldFile.exists()) {
            try {
                //读入原文件
                FileInputStream fis = new FileInputStream(oldFile);
                FileOutputStream fos = new FileOutputStream(newPath);
                byte[] buffer = new byte[1024];
                //当文件没有读到结尾
                while ((hasRead = fis.read(buffer)) != -1) {
                    //写文件
                    fos.write(buffer, 0, hasRead);
                }
                fis.close();
            } catch (Exception e) {
                log.error("===========================  复制单个文件操作出错！ ===========================");
                e.printStackTrace();
            }
        }
    }

    /**
     * 复制文件夹及其下面的所有内容
     * @param oldPath 要复制的文件夹路径
     * @param newPath 目标文件夹路径
     */
    public static void directory(String oldPath, String newPath) {
        File f1 = new File(oldPath);
        //listFiles能够获取当前文件夹下的所有文件和文件夹
        File[] files = f1.listFiles();
        for (int i = 0; files != null &&  i <files.length  ; i++) {
            if (files[i].isDirectory()) {
                File dirNew = new File(newPath + File.separator + files[i].getName());
                //在目标文件夹中创建文件夹
                dirNew.mkdirs();
                //递归
                directory(oldPath + File.separator + files[i].getName(), newPath + File.separator + files[i].getName());
            } else {
                String filePath = newPath + File.separator + files[i].getName();
                copyfile(files[i].getAbsolutePath(), filePath);
            }
        }
    }
}
